/*
 * Copyright (C) 2018 Logos Technology Ltd.
 */

package com.logos.common.eventbus;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.EventBusException;

/**
 * EventBus 工具类
 *
 * <p>此工具类使用在Activity 或者 Fragment 中时，不需要显示的注册和注销EventBus
 * ,使用{@link BindEventBus} 修饰Activity或Fragment 即可完成注册和注销.
 * 使用{@link #sendEvent(Event) {@link #sendStickyEvent(Event)}} 发送通知
 * 接受者不需要注册。重写{@link #onReceiveEvent(Event)}
 * 或者{@link #onReceiveEvent(Event)}处理事件。
 * 注意：
 * {@link #onReceiveEvent(Event)}
 * 和{@link  #onReceiveEvent(Event)}
 * 默认是在主线程中处理，优先级为0 ，为粘性处理如需更改，请重写方法后添加@Subscribe
 * (threadMode = ThreadMode.MAIN，sticky = true，priority = 0)修饰修改
 * 其中ThreadMode提供了四个常量：
 * MainThread 主线程
 * BackgroundThread 后台线程
 * Async 异步线程
 * PostThread 发送线程（默认）
 *
 * <p>sticky true 为粘性广播 false 为非粘性处理
 * priority 为 优先级 默认为0
 * 使用在其他场景下，需要显示的注册和注销。
 */
public class EventBusUtil {

    /**
     * 注册
     *
     * @param object Object对象实例.
     */
    public static void register(Object object) {
        if (!EventBus.getDefault().isRegistered(object)) {
            try {
                EventBus.getDefault().register(object);
            } catch (EventBusException exception) {
                exception.printStackTrace();
            }
        }
    }

    /**
     * 解绑
     *
     * @param object Object对象.
     */
    public static void unregister(Object object) {
        if (EventBus.getDefault().isRegistered(object)) {
            EventBus.getDefault().unregister(object);
        }
    }

    /**
     * 发送事件
     *
     * @param event Event
     */
    public static void sendEvent(Event event) {
        EventBus.getDefault().post(event);
    }

    /**
     * 发送事件
     *
     * @param event Event
     */
    public static void sendStickyEvent(Event event) {
        EventBus.getDefault().postSticky(event);
    }

    /**
     * 发送有序广播可以终止广播的继续往下传递
     *
     * @param event 事件.
     */
    public static void cancelEventDelivery(Event event) {
        EventBus.getDefault().cancelEventDelivery(event);
    }
}
